hdu 5265 pog loves szh II STL

pog loves szh II

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

http://acm.hdu.edu.cn/showproblem.php?pid=5265

Description

pog在与szh玩游戏,首先pog找到了一个包含n个数的序列,然后他在这n个数中挑出了一个数A,szh出于对pog的爱,在余下的n−1个数中也挑了一个数B,那么szh与pog的恩爱值为(A+B)对p取模后的余数,pog与szh当然想让恩爱值越高越好,并且他们想知道最高的恩爱值是多少。

Input

若干组数据(不超过5组n≥1000)。
每组数据第一行两个整数n(2≤n≤100000),p(1≤p≤231−1)。
接下来一行n个整数ai(0≤ai≤231−1)。

Output

对于每组的每个询问,输出一行,表示pog与szh的最大恩爱值。

Sample Input

4 4
1 2 3 0
4 4
0 0 2 2

Sample Output

3
2

HINT

 

题意

 

题解:

STL大法好!

STL拯救世界!

代码:

 

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define test freopen("test.txt","r",stdin)  
#define maxn 2000001
#define mod 10007
#define eps 1e-9
int Num;
char CH[20];
const int inf=0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fLL;
inline ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
inline void P(int x)
{
    Num=0;if(!x){putchar('0');puts("");return;}
    while(x>0)CH[++Num]=x%10,x/=10;
    while(Num)putchar(CH[Num--]+48);
    puts("");
}
//**************************************************************************************

ll a[maxn];

multiset<ll> S;
int main()
{
    //test;
    int n;
    ll p;
    while(cin>>n>>p)
    {
        S.clear();
        for(int i=0;i<n;i++)
        {
            a[i]=read();
            a[i]%=p;
            S.insert(a[i]);
        }
        ll ans=0;
        for(int i=0;i<n;i++)
        {
            S.erase(S.find(a[i]));
            multiset<ll>::iterator it=S.lower_bound(p-a[i]);
            it--;
            ans=max(ans,(a[i]+*it)%p);
            it=S.lower_bound(p*2-a[i]);
            it--;
            ans=max(ans,(a[i]+*it)%p);
            S.insert(a[i]);
        }
        cout<<ans<<endl;
    }
    
}

 

 

 

posted @ 2015-06-08 21:36  qscqesze  阅读(387)  评论(0编辑  收藏  举报